package band.wukong.practice.javase.core.thread.basic;

/**
 * 主线程和用户自定义线程并发运行
 *
 * @author wukong(wukonggg@139.com)
 * Date: 2009-11-5 9:34:37
 */
public class Demo02 extends Thread {
    
    public void run() {
        for (int a = 0; a < 50; a++) {
            System.out.println(currentThread().getName() + ":" + a);
            try {
                sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void main(String[] args) {
        Demo02 machine1 = new Demo02();
        Demo02 machine2 = new Demo02();
        machine1.run();
//        machine1.start();
//        machine2.start();

    }

/*
Thread的start和run
1） start：
用start方法来启动线程，真正实现了多线程运行，
这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。
通过调用Thread类的start()方法来启动一个线程，这时此线程处于就绪（可运行）状态，并没有运行，
一旦得到cpu时间片，就开始执行run()方法，
这里方法run()称为线程体，它包含了要执行的这个线程的内容，Run方法运行结束，此线程随即终止。

2） run：
run()方法只是类的一个普通方法而已，如果直接调用Run方法，程序中依然只有主线程这一个线程，
其程序执行路径还是只有一条，还是要顺序执行，还是要等待run方法体执行完毕后才可继续执行下面的
代码，这样就没有达到写线程的目的。

总结：调用start方法方可启动线程，而run方法只是thread的一个普通方法调用，还是在主线程里执行。

*/
}
